/**

 @Name：layuiAdmin 公共业务
 @Author：贤心
 @Site：http://www.layui.com/admin/
 @License：LPPL

 */

layui.define(['table','commons','form','totalFilter'],function(exports){
    var $ = layui.$
        ,layer = layui.layer
        ,laytpl = layui.laytpl
        ,setter = layui.setter
        ,view = layui.view
        ,admin = layui.admin
        ,table = layui.table
        ,form = layui.form
        ,totalFilter=layui.totalFilter
        ,commons = layui.commons;

    //公共业务的逻辑处理可以写在此处，切换任何页面都会执行
    //……


//修改密码
    admin.events.resPassword = function(obj){
        layer.open({
            type: 2,
            area: ['530px', '320px'],
            title: ['修改密码'],
            content: serverPath.systemPath + setter.openPath + setter.sysLinkPath+'sysUser/view/resetPwd',
        });
    };
    //退出
    admin.events.logout = function(){
        //执行退出接口
        window.location.href =serverPath.systemPath + "/logout"
        // admin.req({
        //   url: '/logout'
        //   ,type: 'get'
        //   ,data: {}
        //   ,done: function(res){ //这里要说明一下：done 是只有 response 的 code 正常才会执行。而 succese 则是只要 http 为 200 就会执行
        //
        //     //清空本地记录的 token，并跳转到登入页
        //     // admin.exit();
        //   }
        // });
    };

    var common = {
        /*
        // 表格头部按钮
          头部提供
          add 添加弹窗
          delete 批量删除
          query 查询    目前处理 时间相关只包含 开始结束共存
          reset 重置
          自定义方法
        */
        tableTopBtn: function(props){
            if(props.name){
                table.on('toolbar('+props.name+')', function (obj) {
                    var checkStatus = table.checkStatus(obj.config.id);
                    var data = checkStatus.data;
                    var _this = this;
                    switch (obj.event) {
                        case 'add':
                            layer.open({
                                type: 2,
                                title: _this.getAttribute('wintitle'),
                                area: [_this.getAttribute('areaw'), _this.getAttribute('areah')],
                                content: _this.getAttribute('requrl'),
                                end: function (index, layero) {
                                    //执行重载
                                    commons.tableReload({name:props.name});
                                    // 时间刷新
                                    commons.queryToolbar({name:props.name});
                                    typeof props.addCallback == "function" ? props.addCallback(index, layero) : null;
                                }
                            });
                            break;
                        case 'delete':
                            if (data.length === 0) {
                                layer.msg('请先选择一行数据！');
                            } else {
                                var seleIds = [];
                                for (var i = 0; i < data.length; i++) {
                                    seleIds.push(data[i].id);
                                }
                                var s = seleIds.join(",");
                                var t_date = {};
                                t_date.id = s;
                                layer.confirm('确定删除当前数据吗？', function () {
                                    commons.deleteData({
                                        path:_this.getAttribute('requrl'),
                                        data:t_date,
                                        method:'GET',
                                        ajaxCallback: function (data) {
                                            //成功后的提示
                                            layer.alert(data.msg, function (index) {
                                                layer.close(index);
                                                //执行重载
                                                commons.tableReload({name:props.name});
                                                // 时间刷新
                                                commons.queryToolbar({name:props.name});
                                            });
                                        }
                                    });
                                })
                            }
                            break;
                        case 'query':
                            var params = commons.queryHeaderVal({name:props.name});
                            commons.tableReload({name:props.name,where: params.propslist});
                            var formName = $('[lay-id='+props.name+'] form[lay-filter]').attr('lay-filter');
                            form.val(formName, params.eaholist);
                            // 检索刷新
                            commons.queryToolbar({name:props.name});
                            break;

                        case 'reset':
                            var params = commons.queryHeaderVal({name:props.name,type:'1'});
                            commons.tableReload({name:props.name,where: params.propslist});
                            var formName = $('[lay-id='+props.name+'] form[lay-filter]').attr('lay-filter');
                            form.val(formName, params.eaholist);
                            // 检索刷新
                            commons.queryToolbar({name:props.name});
                            break;

                        case obj.event :
                            if(props.method){
                                typeof props.method[obj.event+'Callback'] == "function" ? props.method[obj.event+'Callback'](obj) : null;
                            }
                            break;
                    }
                });
            }

        },

        /*
        // 表格列表内按钮

          目前提供
          edit 修改弹窗打开
          del 单条数据删除
          自定义方法
        */
        tableListBtn:function(props){
            if(props.name) {
                //监听行工具事件
                table.on('tool('+props.name+')', function (obj) { //注：tool 是工具条事件名，test 是 table 原始容器的属性 lay-filter="对应的值"
                    var _this = this;
                    var data = obj.data, //获得当前行数据
                        layEvent = obj.event; //获得 lay-event 对应的值
                    if (layEvent === 'edit') {
                        layer.open({
                            type: 2,
                            title: _this.getAttribute('wintitle'),
                            area: [_this.getAttribute('areaw'), _this.getAttribute('areah')],
                            //传递参数的时候，参数必须跟在#之前
                            content: _this.getAttribute('requrl'),
                            end: function (index, layero) {
                                //执行重载
                                commons.tableReload({name:props.name});
                                // 检索刷新
                                commons.queryToolbar({name:props.name});
                            }
                        });
                    } else if (layEvent === 'del') {
                        layer.confirm('确定删除当前数据吗？', function (index) {
                            var seleId = obj.data.id;
                            var t_date = {};
                            t_date.id = seleId;

                            commons.deleteData({
                                path:_this.getAttribute('requrl'),
                                data:t_date,
                                method:'GET',
                                ajaxCallback: function (data) {
                                    //成功后的提示
                                    layer.alert(data.msg, function (index) {
                                        layer.close(index);
                                        //执行重载,公共的删除返回，如果页面不需要分页会有问题，需要在删除按钮上增加isOpenPage属性，只要有值就可以
                                        var isOpenPage = _this.getAttribute('isOpenPage');
                                        commons.tableReload({name:props.name,isOpenPage:isOpenPage});
                                        commons.queryToolbar({name:props.name});
                                    });
                                }
                            });

                        });
                    } else {
                        if(props.method){
                            typeof props.method[obj.event+'Callback'] == "function" ? props.method[obj.event+'Callback'](obj) : null;
                        }
                    }
                });
            }
        },
        //监听排序事件  lay-filter   even  正常的json，需要多个方法   ，隔开
        tableSort: function(tableLayFilter,even,paramFormLayFilter){
            table.on('sort('+tableLayFilter+')', function(obj){
                 var where = {};
                 var Filter=$("form.layui-form").attr("lay-filter");
                 if(paramFormLayFilter){
                    Filter=paramFormLayFilter
                 }
                 $("form[lay-filter='"+Filter+"']").find(".filter-value").each(function() {
                    where[this.name] = this.value;
                });
                // console.log(obj)
                //console.log($(this).data('sortname'));
                table.reload(tableLayFilter, {
                    initSort: obj //记录初始排序，如果不设的话，将无法标记表头的排序状态。
                    ,where: { //请求参数（注意：这里面的参数可任意定义，并非下面固定的格式）
                        sortName:!!($(this).data('sortname'))?$(this).data('sortname'):obj.field //排序字段
                        ,sortOrder: obj.type //排序方式
                    }
                });
                // even.show();
                if(even){
                    for(var key in even){
                        if (even[key]) {
                            even[key]();
                        }
                    }
                }
                totalFilter.init(tableLayFilter);
                setTimeout(function () {
                    form.val(Filter,where);
                },0)
            });
        },

        //table表格回车搜索功能
        //搜索按钮和查询框被  class为ccpui-enterSel的div包裹
        //selDom为输入框dom元素 clickDOm为点击搜索按钮dom元素
        tableSelectCon:function(selDom,clickDOm,parentSle){
            $(selDom).focus(function () {
                $(this).keyup(function(event){
                    if(event.keyCode ==13){
                        $(this).parents(parentSle).find(clickDOm).click()
                    }
                });
            })
        },

        /**
         * 监听table带条件渲染事件
         * @param tableLayFilter      表的layui-Filter
         * @param paramFormLayFilter  查询form的layui-Filter
         * @param paramJson           tableReload额外的参数json{"name":"value"}
         * @param isClear             是否清空form中参数  true 清空  false 不清空
         * @param isPage              是否分页,有分页不需要传值,没有分页需要传值true
         * @param limit               每页显示的记录数，如果不传值，默认10条每页
         */
        tableConditionRender: function(tableLayFilter,paramFormLayFilter,paramJson,isClear,isPage,limit){
            var params = {};
            try {
                if(paramJson){
                    if (typeof paramJson == 'string') {
                        params=JSON.parse(paramJson);
                    }else if(typeof paramJson == "object"){
                        if(paramJson){
                            params = paramJson;
                        }
                    }
                }
            } catch(e) {
                throw "Parameter format error -->"+e;
            }
            if(!limit){
                limit=10;
            }
            if(!isPage){
                var page={curr: 1, limit: limit};
                params.page=page;
            }

            if(paramFormLayFilter){
                if(isClear){
                    $("form[lay-filter='"+paramFormLayFilter+"']").find(".filter-value").each(function() {
                        params.where[this.name] = "";
                    });
                }else{
                    $("form[lay-filter='"+paramFormLayFilter+"']").find(".filter-value").each(function() {
                        params.where[this.name] = this.value;
                    });
                }
            }
            table.reload(tableLayFilter, params);
            totalFilter.init(tableLayFilter);
            if(paramFormLayFilter){
                if(!isClear){
                    form.val(paramFormLayFilter,params.where);
                }
            }
        },

        // table 相关基础事件绑定调用入口
        tableTool: function (props) {
            // 时间刷新
            commons.queryToolbar({name:props.name});
            this.tableTopBtn({
                name:props.name,
                method:props.method
            })
            this.tableListBtn({
                name:props.name,
                method:props.method
            })
            this.tableSort({
                name:props.name
            })
        },


        /*
        // 数据表单初始化


        */
        updateForm:function (props) {
            if(props.name){
                var id;
                if(props.idValue == '' || props.idValue == null){
                    id = commons.getQueryByName('id');
                }else{
                    id = props.idValue;
                }
                form.render();
                // 表单内时间初始化
                var timeList =  commons.formInfoTimeInit(props.name);
                if(!!id){
                    if(props.primary != null && props.primary != ""){
                        $(props.primary).val(id);
                    }else{
                        $(".id").val(id);
                    }
                    commons.formEcho({
                        name:props.name,
                        path:$('[lay-filter*='+props.name+']').attr('requrl'),
                        method: "GET",
                        data: {
                            id:id
                        },
                        ajaxCallback:function (data) {
                            //表单初始赋值
                            var returnDate = data.data;
                            // 存在时间处理
                            if(timeList.length>0){
                                var dateList = $(".time-init");
                                for(var i=0;i<dateList.length;i++){
                                    var da = dateList[i];
                                    var classList = da.classList;
                                    if(classList&&classList.contains("times")){//HH:mm:ss
                                        returnDate[timeList[i]] = commons.timeData(returnDate[timeList[i]],'2');
                                    }else if(classList&&classList.contains("datetimes")){//yyyy-MM-dd HH:mm:ss
                                        returnDate[timeList[i]] = commons.timeData(returnDate[timeList[i]],'1');
                                    }else{//yyyy-MM-dd
                                        returnDate[timeList[i]] = commons.timeData(returnDate[timeList[i]]);
                                    }
                                }
                            }
                            typeof props.dataCallback == "function" ? props.dataCallback(data) : null;
                        }
                    })

                }
                //监听提交
                var submitName = $('[lay-filter*='+props.name+'] [lay-submit]');
                commons.update({
                    name:'submit('+submitName.attr('lay-filter')+')',
                    path:submitName.attr('requrl'),
                    updateCallback:props.updateCallback?props.updateCallback:null

                });
                form.verify(commons.formVerify);

            }

        },
        filterRecord:function (data) {
            return commons._filterRecord(data);
        },
        bulletWindow: function(index){
            commons._bulletWindow(index);
        }

    };



    //对外暴露的接口
    exports('common', common);
});